package com.aura.springbook.mapper;

import com.aura.springbook.model.Book;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.util.List;

/**
 * 图书Mapper接口
 * 提供以下功能：
 * 1. 基本的增删改查操作（继承自BaseMapper）
 * 2. 根据分类ID查询图书
 * 3. 根据关键词搜索图书
 * 4. 统计分类下的图书数量
 * 5. 统计图书未归还记录数量
 */
public interface BookMapper extends BaseMapper<Book> {

    /**
     * 根据分类ID查询图书列表
     * <p>
     * 查询指定分类下的所有图书
     *
     * @param categoryId 分类ID
     * @return 图书列表
     */
    @Select("SELECT * FROM book WHERE category_id = #{categoryId}")
    List<Book> selectByCategoryId(@Param("categoryId") Long categoryId);

    /**
     * 根据关键词搜索图书（标题或作者）
     * <p>
     * 支持模糊搜索图书标题或作者
     *
     * @param keyword 关键词
     * @return 图书列表
     */
    @Select("SELECT * FROM book WHERE title LIKE CONCAT('%', #{keyword}, '%') OR author LIKE CONCAT('%', #{keyword}, '%')")
    List<Book> selectByKeyword(@Param("keyword") String keyword);

    /**
     * 根据分类ID统计图书数量
     * <p>
     * 用于删除分类前的检查，确保分类下没有图书
     *
     * @param categoryId 分类ID
     * @return 图书数量
     */
    @Select("SELECT COUNT(*) FROM book WHERE category_id = #{categoryId}")
    int selectCountByCategoryId(@Param("categoryId") Long categoryId);

    /**
     * 根据图书ID统计未归还的借阅记录数量
     * <p>
     * 用于删除图书前的检查，确保没有未归还的借阅记录
     *
     * @param bookId 图书ID
     * @return 未归还的借阅记录数量
     */
    @Select("SELECT COUNT(*) FROM borrow_record WHERE book_id = #{bookId} AND status = 0")
    int selectUnreturnedCountByBookId(@Param("bookId") Long bookId);
}